package priv.lirenhe.javasuper.thread.deadlock;

public class ResourceTask implements Runnable{

	public ResourceTask() {
		
	}
	
	static Object oneResource = new Object();
	static Object twoResource = new Object();
	static Object lock = new Object();//为什么这里的只能static
	
	@Override
	public void run() {
		String name = Thread.currentThread().getName();
		if(name.equals("xiaoming")){
			while(true){
//				synchronized (oneResource) {
				synchronized (lock) {
					/*
					System.out.println("我已经获得了oneResource，现在我可以处理这个资源了，接下来我还要twoResource，等我处理了twoResource才能完成我这个功能，也才能释放所有被我锁住的资源，等待中...");
					synchronized (twoResource) {
						System.out.println("我已经获得了twoResource");
					}
					*/
					System.out.println("我已经获得了oneResource，现在我可以处理这个资源了，接下来我还要twoResource，等我处理了twoResource才能完成我这个功能，也才能释放所有被我锁住的资源，等待中...");
					System.out.println("我已经获得了twoResource");
					System.out.println("处理完毕");
				}
			}
		}else if(name.equals("xiaohong")){
			while(true){
//				synchronized (twoResource) {
				synchronized (lock) {
					/*
					System.out.println("我已经获得了twoResource，现在我可以处理这个资源了，接下来我还要oneResource，等我处理了oneResource才能完成我这个功能，也才能释放所有被我锁住的资源，等待中...");
					synchronized (oneResource) {
						System.out.println("我已经获得了oneResource");
					}
					*/
					System.out.println("我已经获得了twoResource，现在我可以处理这个资源了，接下来我还要oneResource，等我处理了oneResource才能完成我这个功能，也才能释放所有被我锁住的资源，等待中...");
					System.out.println("我已经获得了oneResource");
					System.out.println("处理完毕");
				}
				
			}
		}
	}
}
